//
//  HMTabBarItem.swift
//  HMWeiBo
//
//  Created by Apple on 16/8/10.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit

class HMTabBarItem: UITabBarItem {

    override var badgeValue: String? {
    
        didSet{
        
            // 怎么拿到 tabBarcontroller
            // 通过KVC获取到系统的私有属性
            var tabbarController: UITabBarController = valueForKey("_target") as! UITabBarController
            
            for tabbarButton in tabbarController.tabBar.subviews {
                //            print(tabbarButton)
                // 第一步: 先找到 tabBarbutton
                if tabbarButton.isKindOfClass(NSClassFromString("UITabBarButton")!){
                    
                    //第二步: 对 UITabBarbutton的子视图进行遍历,找到 _UIBadgeView
                    //                print(tabbarButton.subviews)
                    for childBadgeView in tabbarButton.subviews {
                        
                        if childBadgeView.isKindOfClass(NSClassFromString("_UIBadgeView")!){
                            
                            //                        print(childBadgeView.subviews)
                            
                            // 第三步: 对 _UIBageView的subviews进行遍历
                            for childBadgeBackGround in childBadgeView.subviews {
                                
                                if childBadgeBackGround.isKindOfClass(NSClassFromString("_UIBadgeBackground")!){
                                    
                                    print("终于找打你了,还好,没有放弃")
                                    // 我们需要对 _UIBadgeBackground 的属性进行遍历
                                    
                                    /*
                                    1. 类
                                    2. 属性的个数 count
                                    */
                                    var count: UInt32 = 0
                                    // 1. copyIvarList
                                    
                                    let result = class_copyIvarList(NSClassFromString("_UIBadgeBackground"), &count)
                                    
                                    for i in 0..<count {
                                        
                                        // 1.拿到属性所对应的 ivar
                                        let ivar = result[Int(i)]
                                        
                                        // 2.拿到对应的属性的cName
                                        let cName = ivar_getName(ivar)
                                        
                                        // 3. 把cName 转换成 String
                                        let name = String(CString: UnsafePointer<CChar>(cName), encoding: NSUTF8StringEncoding)
                                        
                                        print(name)
                                        /*
                                        forKey 与 forKeyPath 的区别
                                        forKey就是这个类的属性
                                        forKeyPath 可以是这个类的父类的属性  用. 来表示他的路径
                                        _UIBadgeBackground._image
                                        */
                                        // 获得到 _iamge的私有属性
                                        // 注意调用对象
                                        childBadgeBackGround.setValue(UIImage(named: "main_badge"), forKey: "_image")
                                        //                                    setValue(UIImage(named: "main_badge"), forKeyPath: "_UIBadgeBackground._UIBadgeBackground._image")
                                    }
                                    
                                }
                                
                            }
                            
                        }
                        
                    }
                    
                }
            }
            
        }
        
    }
    
}
